from captcha.image import ImageCaptcha  # pip install captcha
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image,ImageDraw,ImageFont
import random
import os
import io

# 验证码中的字符, 就不用汉字了
number = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
            'v', 'w', 'x', 'y', 'z']
ALPHABET = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
            'V', 'W', 'X', 'Y', 'Z']


# 验证码一般都无视大小写；验证码长度4个字符
def random_captcha_text(char_set=number + alphabet + ALPHABET, captcha_size=4):
    captcha_text = []
    for i in range(captcha_size):
        c = random.choice(char_set)
        captcha_text.append(c)
    return captcha_text


def gen_list():
    img_list = []
    root_dir = "./images"
    for parent, dirnames, filenames in os.walk(root_dir):  # 三个参数：分别返回1.父目录 2.所有文件夹名字（不含路径） 3.所有文件名字
        for filename in filenames:  # 输出文件信息
            img_list.append(filename.replace(".png",""))
            # print("parent is:" + parent)
            # print("filename is:" + filename)
            # print("the full name of the file is:" + os.path.join(parent, filename))  # 输出文件路径信息
    return img_list

# 生成字符对应的验证码
def gen_captcha_text_and_image3(imageNo=1):
    captcha = gen_list()
    # print(len(captcha))
    captcha_text = captcha[imageNo%100]
    captcha_img = "./images/"+captcha_text+".png"

    captcha_image = Image.open(captcha_img)
    captcha_image = np.array(captcha_image)
    # print(captcha_text, captcha_image)
    return captcha_text, captcha_image
def gen_captcha_text_and_image2(imageNo=1):
    captcha = gen_list()
    # print(len(captcha))
    captcha_text = captcha[imageNo%100]
    captcha_img = "./images/"+captcha_text+".png"

    captcha_image = Image.open(captcha_img)
    captcha_image = np.array(captcha_image)
    # print(captcha_text, captcha_image)
    return captcha_text, captcha_image

def gen_captcha_text_and_image(imageNo=1):
    image = ImageCaptcha()

    captcha_text = random_captcha_text()
    captcha_text = ''.join(captcha_text)

    captcha = image.generate(captcha_text)
    # image.write(captcha_text, captcha_text + '.jpg')  # 写到文件

    captcha_image = Image.open(captcha)
    captcha_image = np.array(captcha_image)
    return captcha_text, captcha_image

def random_color(s=1,e=255):
    return (random.randint(s,e),random.randint(s,e),random.randint(s,e))

def gen_captcha_text_and_image4(length=4,width=160,height=40):
    # 创建Image对象
    image = Image.new('RGB', (width, height), (255, 255, 255))
    # 创建Font对象
    font = ImageFont.truetype('Arial.ttf', 32)
    # 创建Draw对象
    draw = ImageDraw.Draw(image)
    # 验证码
    captcha_text = random_captcha_text()
    captcha_text = ''.join(captcha_text)
    # 随机颜色验证码写到图片上
    for t in range(length):
        draw.text((40 * t + 5, 5), captcha_text[t], font=font, fill=random_color(0, 127))

    captcha_image = Image.open(image)
    captcha_image = np.array(captcha_image)

    return captcha_text, captcha_image


def get_captcha():
    pass

if __name__ == '__main__':
    # 测试
    text, image = gen_captcha_text_and_image(99)
    print(image.shape)
    print(text)
    exit()
    # image.save("./images/" + text + ".png", "PNG")

    f = plt.figure()
    ax = f.add_subplot(111)
    ax.text(0.1, 0.9, text, ha='center', va='center', transform=ax.transAxes)
    plt.imshow(image)

    plt.show()